// 知识点1：传统意义上，可以将全局定义的实体名字定义的很长以避免命名空间污染，这样的名字通常将其名字所属的库作为前缀，但比较费时费力

// 知识点2：命名空间可以更好的防止名字冲突，且避免全局名字的固有限制

// 知识点3：namespace后加命名空间的名字，加上一对花括号就是一个完整的命名空间（注意花括号后无需加分号），只要能出现于全局作用域中的声明就能置于命名空间内，主要包括：类、变量（初始化操作）、函数（）声明和定义、模版、命名空间，命名空间不能定义与函数和类的内部

// 知识点4：在一个命名空间内，不允许存在同名成员，其名字可以被空间内的其他成员直接访问（包括内嵌的作用域），位于命名空间之外的代码必须指明所用名字所属的命名空间

// 知识点5：命名空间可以不连续，可以随时打开进行添加操作，另外可以将声明和定义分离开来

// 知识点6：定义包含多个不相关类型的命名空间应该使用单独的文件分别表示每个类型，我们可以将一个库定义在几个不同的文件中，不同的类、变量、函数分别放在不同的文件中。注意不要将#include放在命名空间的内部

// 知识点7：可以在命名空间的内部和外部定义成员，但是外部定义必须加上前缀指出所属的命名空间。虽然其定义可以放在外部，但是必须定义在所属空间的外层空间，在另一个不相关文件中定义是不被允许的

// 知识点8：模版特例化必须定义在原始模版所属的命名空间中，只要在内部声明，可以在外部定义

// 知识点9：全局命名空间以隐式的方式声明，没有名字，::可以进行表示作用域限定

// 知识点10：命名空间可以嵌套，访问时需加多重限定符

// 知识点11：内联命名空间指的是该命名空间中的成员可以直接被外层命名空间使用，inline位于namespace之前，只需出现在第一次定义时，经常用于应用程序代码更换版本的时候，若我们想使用早期版本的代码，需要加上命名空间限定符

// 知识点12：namespace之后不加名字，为未命名的命名空间，其中的变量拥有静态的生命周期，程序结束时才被销毁，但是不可以跨文件进行定义，其中的成员可以直接使用。当然，未命名的命名空间也可以嵌套在其他命名空间中，此时可以通过外层的命名空间名加以访问
